import Vue from 'vue';
import uni_request from '@/js_sdk/yinchengnuo-req/uni_request/uni_request.js'
import Encrypt from '@/common/encrypt.js'
import jsrsasign from 'jsrsasign'
import util from '@/common/util.js'
import api from '@/common/api.js'


let token = '',
	isRefreshing = false,
	platform = '',
	that = this;
	
	// 获取设备系统信息
	uni.getSystemInfo({
	    success: function (res) {
	        // console.log(res.platform);
			platform = res.platform
	    }
	});
console.log(platform)
// 创建自定义接口服务实例
const request = uni_request({ // 有效配置项只有三个
	baseURL: api.BASE_URL, //baseURL
	// timeout: 6000, // 超时时间
	header: {
		'content-type': 'application/x-www-form-urlencoded'
	} // 设置请求头，建议放在请求拦截器中
})



// 请求拦截
request.interceptors.request.use(async (config, ...args) => {
	// debugger
	if (!uni.getStorageSync('TokenData')) {
		await util.getToken()
	}
	// args[0] method(方法) args[1] url(地址) args[2] data(参数)
	// console.log('请求拦截');
	// console.log(args);
	// console.log(args[1].charAt(args[1].length - 1));
	// console.log(args[0]);
	// console.log(args[1]);
	// console.log(args[2]);
	// debugger
	uni.showLoading({
	    title: '加载中'
	});
	token = uni.getStorageSync('TokenData')
	// config.header.token = Encrypt.PublicEntryption(token) //添加header token
	config.header.token = token //添加header token
	// ios不进行加密处理
	if(platform == 'ios'){
		config.body.ciphertext = JSON.stringify(config.body.ciphertext)
	}else{
		config.body.ciphertext = Encrypt.PublicEntryption(config.body.ciphertext); //加密
	}
	
	// config.body.ciphertext = JSON.stringify(config.body.ciphertext)
	// console.log(config)
	// console.log('请求拦截');
	return config
})


// 响应拦截
request.interceptors.response.use(async (response, ...args) => { // 响应拦截器（可以设置多个, 同时也可以使用异步方法）
	// args[0] method args[1] url args[2] data
	// await new Promise(resolve => setTimeout(() => resolve(), 3000))
	// debugger
	// console.log('响应拦截');
	// console.log(args[0]);
	// console.log(args[1]);
	// console.log(args[2]);
	// console.log(response);
	// debugger
	
	if (response.statusCode == 200) {
		uni.hideLoading();
		if(response.data.success == false || response.data.data == null || response.data.data == ''){
			return response
		}else{
			// ios不进行解密处理
			if(platform == 'ios'){
				response.data.data = JSON.parse(response.data.data); //转json对象
			}else{
				response.data.data = JSON.parse(Encrypt.PublicDecode(response.data.data)); //解密 转json对象
			}
			
			// response.data.data = JSON.parse(response.data.data);
			// console.log('响应拦截');
			return response
		}
	}else if (response.statusCode == 401) {//token过期
		// debugger
		await util.getToken(); //重新获取token
		token = uni.getStorageSync('TokenData')
		let refreshResponseData={};
		// debugger
		await new Promise((resolve, reject) => {
			uni.request({
				url: api.BASE_URL + args[1],
				data: args[2],
				method: 'POST',
				header: {
					'content-type': 'application/x-www-form-urlencoded',
					'token': token
				},
				success: (res) => {
					uni.hideLoading();
					// debugger
					// ios不进行解密处理
					if(platform == 'ios'){
						res.data.data = JSON.parse(res.data.data); //解密 转json对象
					}else{
						res.data.data = JSON.parse(Encrypt.PublicDecode(res.data.data)); //解密 转json对象
					}
					
					// console.log(res.data);
					resolve(res);
				},
				fail: (err) => {
					reject('err')
				}
			});
		})
		.then(function(data) {
			// console.log(data);
			// debugger
			refreshResponseData = data
			refreshResponseData.success=true;
		})
		return refreshResponseData;
	}else if(response.statusCode == 406){//登录状态失效
		that.$u.toast('登录状态失效，请重新登录');
		uni.navigateTo({
			url:'/pages/login/login.vue'
		})
	}
})

request.onerror = async (...args) => { // 请求失败统一处理方法
	// console.log('onerror', args)
	// debugger
}

export default request
